#include "SysDefine.hpp"

const string null_string = "";

void Settings::Debug()
{
    cout << endl << "===============================" << endl;
    for (auto n : _valueMap) {
        float num = std::get<0>(n.second);
        string str = std::get<1>(n.second);
        if (str.length() == 0) cout << n.first << " = " << num << endl;
        else cout << n.first << " = '" << str  << "' (" << num << ")" << endl;
    }
    cout << "===============================" << endl;
}

// 检查有没有此设置，没有返回false
bool Settings::Has(string key)
{
    return _valueMap.find(key) != _valueMap.end();
}

// 与Check结果相反
bool Settings::NotHas(string key)
{
    return _valueMap.find(key) == _valueMap.end();
}

// 设值函数，已经存在返回true，不存在返回false，都会存值
bool Settings::Set(string key, int value)
{
    if (_valueMap.find(key) != _valueMap.end()) { // 找到了
        _valueMap[key] = make_tuple(value, to_string(value));
        return true;
    } else { // 没找到
        _valueMap[key] = make_tuple(value, to_string(value));
        return false;
    }
}

// 设值函数，已经存在返回true，不存在返回false，都会存值
bool Settings::Set(string key, float value)
{
    if (_valueMap.find(key) != _valueMap.end()) { // 找到了
        _valueMap[key] = make_tuple(value, to_string(value));
        return true;
    } else { // 没找到
        _valueMap[key] = make_tuple(value, to_string(value));
        return false;
    }
}

// 设值函数，已经存在返回true，不存在返回false，都会存值
bool Settings::Set(string key, string value)
{
    if (_valueMap.find(key) != _valueMap.end()) { // 找到了
        _valueMap[key] = make_tuple(StrToLongInt(value), value);
        return true;
    } else { // 没找到
        _valueMap[key] = make_tuple(StrToLongInt(value), value);
        return false;
    }
}

// 返回整数，找不到返回0，建议先check
int Settings::GetNum(string key)
{
    if (_valueMap.find(key) != _valueMap.end()) { // 找到了
        return std::get<0>(_valueMap[key]);
    }
    return 0;
}

// 返回浮点数，找不到返回0，建议先check
float Settings::GetFloat(string key)
{
    if (_valueMap.find(key) != _valueMap.end()) { // 找到了
        return std::get<0>(_valueMap[key]);
    }
    return 0;
}

// 返回字符串，找不到返回""，建议先check
const string& Settings::GetString(string key)
{
    if (_valueMap.find(key) != _valueMap.end()) { // 找到了
        return std::get<1>(_valueMap[key]);
    }
    return null_string;
}

// 返回字符串指针，找不到返回""，建议先check
const char* Settings::GetCharPtr(string key)
{
    if (_valueMap.find(key) != _valueMap.end()) { // 找到了
        return std::get<1>(_valueMap[key]).c_str();
    }
    return null_string.c_str();
}